#include<iostream>
#include<signal.h>
#include<unistd.h>
#include<cstdlib>
#include<sys/wait.h>

void PrintPending(sigset_t pending)
{
    std::cout << "curr pending list[" << getpid() << "]:";
    for(int i=31;i>0;i--)
    {
        if(sigismember(&pending,i))
        {
            std::cout << 1;
        }
        else{
            std::cout << 0;

        }
    }
            std::cout << std::endl;
}

int main()
{
    //建立两sigset类型
    sigset_t block,oblock;
    //初始化两类型：
    sigemptyset(&block);
    sigemptyset(&oblock);
    //添加二号信号
    sigaddset(&block,2);
    // 屏蔽2号信号：
    sigprocmask(SIG_SETMASK,&block,&oblock);
    ///////////////////////////////////////////
    //建立获取sigset类型
    sigset_t pending;

    int cut = 0;
    while(true)
    {
        //获取pengding表集：
        sigpending(&pending);
        //打印pending位图情况：
        PrintPending(pending);
        sleep(1);
        cut++;
        if(cut == 15)
        {
            std::cout << "解除对二号信号的屏蔽" << std::endl;
            sigprocmask(SIG_SETMASK,&oblock,nullptr);

        }
    }
        return 0;
}